package firstday;

public class MyLinkedList {
    private Node first;
    private Node last;
    private int size;
    //创建节点，
    public void add(Object o) {
        Node n=new Node();
        //创建头节点
        if(first==null) {
            n.setPre(null);
            n.setObj(o);
            n.setNext(null);
            first=last=n;//first和last都指向n这个节点
        }
        else {
            n.setPre(last);
            n.setObj(o);
            n.setNext(null);
            last.setNext(n);
            last=n;
        }
        size++;
    }
    //获取指点索引的元素
    public Object get(int index) {
        rangeCheck(index);
        Node temp=first;
        if(first!=null) {
            for(int i=0;i<index;i++) {
                temp=temp.next;
            }
        }
        return temp.obj;
    }
//检查是否超出索引范围
    public void rangeCheck(int index) {
        if(index<0||index>=size) {
            try {
                throw new Exception();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    /***
     * 在索引位置插入值
     * @param index
     * @param obj
     */
    public void add(int index,Object obj) {
        //根据索引查出节点
        Node temp=findNode(index);
        //创建新的节点，并赋值
        Node newNode=new Node();
        newNode.obj=obj;
        if(temp!=null) {
            //找出当前索引的前一个节点
            Node up=temp.pre;
            //将前一个节点的下一个节点赋值为新节点
            up.next=newNode;
            //将新节点的前一个节点赋值为up节点
            newNode.pre=up;
            //将新节点的下一个节点赋值temp节点
            newNode.next=temp;
            //将temp节点的前一个节点赋值为新节点
            temp.pre=newNode;


            size++;
        }
    }
    /**
     * 按照索引查找节点
     * @param index
     * @return
     */
    private Node findNode(int index) {
        Node temp=first;
        if(first!=null) {
            for(int i=0;i<index;i++) {
                temp=temp.next;
            }
        }
        return temp;
    }
    /**
     * 按索引删除数据
     * @param index
     */
    public void remove(int index) {
        rangeCheck(index);
        Node temp=findNode(index);

        if(temp!=null) {
            Node up=temp.pre;
            Node down=temp.next;
            up.next=down;
            down.pre=up;
            size--;
        }
    }
    public int size() {
        return size;
    }
    public static void main(String[] args) {

        MyLinkedList list=new MyLinkedList();
        list.add("aaa");
        list.add("bbbb");
        list.add("ccccc");
        list.add(3,"acassc");

        System.out.println(list.size());
        System.out.println(list.get(1));
        System.out.println(list.findNode(1));

    }
}